﻿#include<iostream>
using namespace std;

//class Solution {
//public:
//    string addStrings(string num1, string num2) {
//        string str;
//        str.reserve(max(num1.size(), num2.size()) + 1);
//        int end1 = num1.size() - 1;
//        int end2 = num2.size() - 1;
//        int next = 0;
//        while (end1 >= 0 || end2 >= 0)
//        {
//            int x1 = end1 >= 0 ? num1[end1--] - '0' : 0;
//            int x2 = end2 >= 0 ? num2[end2--] - '0' : 0;
//
//            int x = x1 + x2 + next;
//
//            next = x / 10;
//            x = x % 10;
//
//            //str.insert(str.begin(), x +'0');
//            str += (x + '0');
//        }
//
//        if (next == 1)
//        {
//            //str.insert(str.begin(), '1');
//            str += '1';
//        }
//        reverse(str.begin(), str.end());
//        return str;
//    }
//    string multiply(string num1, string num2) {
//        if (num1 == "0" || num2 == "0")
//            return "0";
//        string ans = "0";
//        int m = num1.size();
//        int n = num2.size();
//        for (int i = n - 1; i >= 0; i--)
//        {
//            string cur;
//            for (int j = n - 1; j > i; j--)
//                cur += '0';
//            int next = 0;//进位
//            int y = num2.at(i) - '0';
//            for (int j = m - 1; j >= 0; j--)
//            {
//                int x = num1[j] - '0';
//                int product = x * y + next;
//                next = product / 10;
//                product = product % 10;
//                cur += (product + '0');
//            }
//            if (next != 0)
//            {
//                cur += (next + '0');
//            }
//            reverse(cur.begin(), cur.end());
//            ans = addStrings(ans, cur);
//        }
//        return ans;
//    }
//};

//int main()
//{
//    Solution s1;
//    cout << s1.multiply("123", "456") << endl;
//    return 0;
//}

//﻿int main()
//{
//    string a = "hello world";
//    string b = a;
//    if (a.c_str() == b.c_str())
//    {
//        cout << "true" << endl;
//    }
//    else cout << "false" << endl;
//    string c = b;
//    c = "";
//    if (a.c_str() == b.c_str())
//    {
//        cout << "true" << endl;
//    }
//
//    else cout << "false" << endl;
//    a = "";
//    if (a.c_str() == b.c_str())
//    {
//        cout << "true" << endl;
//    }
//    else cout << "false" << endl;
//    return 0;
//
//}

//int main()
//{
//    /*string a = "hello world";
//    string b = a;
//    cout << a.c_str() << endl;
//    cout << b.c_str() << endl;
//    return 0;*/
//}
//int main()
//{
//    string strText = "How are you?";
//    string strSeparator = " ";
//    string strResult;
//    int size_pos = 0;
//    int size_prev_pos = 0;
//    while ((size_pos = strText.find_first_of(strSeparator, size_pos)) != string::npos)
//    {
//        strResult = strText.substr(size_prev_pos, size_pos - size_prev_pos);
//        cout << strResult << " ";
//        size_prev_pos = ++size_pos;
//    }
//    if (size_prev_pos != strText.size())
//    {
//        strResult = strText.substr(size_prev_pos, size_pos - size_prev_pos);
//        cout << strResult << " ";
//    }
//    cout << endl;
//    return 0;
//}
//class Solution {
//public:
//    string reverseStr(string s, int k) {
//        int size = s.size();
//        int a = 0;
//        while (size >= 2 * k)
//        {
//            reverse(s.begin() + a, s.begin() + a + k);
//            size -= 2 * k;
//            a += 2 * k;
//        }
//        if (size >= k && size < 2 * k)
//        {
//            reverse(s.begin() + a, s.begin() + a + k);
//            size -= k;
//            a += k;
//            return s;
//        }
//        else
//        {
//            reverse(s.begin() + a, s.end());
//            return s;
//        }
//    }
//};

class Solution {
public:
    string reverseWords(string s) {
        int pos = 0;
        int a = 0;
        while ((pos = s.find_first_of(" ", pos)) != string::npos)
        {
            reverse(s.begin() + a, s.begin() + a + (pos - a));
            pos++;
            a = pos;
        }
        if (a != s.size())
        {
            reverse(s.begin() + a, s.end());
        }
        return s;
    }
};
int main()
{
    Solution s;
    cout << s.reverseWords("Let's take LeetCode contest") << endl;
    return 0;
}